<template>
  <div  class="container-wrapper" :class="[customClass]">
    <div @click.stop="selectWidget(widget)">
      <draggable 
        :list="widgetList"
        item-key="id" 
        group="dragGroup"
        ghost-class="ghost"
        handle=".drag-handler"
        filter=".forbid"
        dragClass="dragClass"
        chosen-class="chosenClass"
        animation="300"
       
        @start="onStart"
        @end="onEnd"
        @add="onAdd" 
        @update="onUpdate" 
        :move="onMove"
      >
    
        <template #item="{ element: widget, index }">
          <div class="transition-group-el" style="display: inline-block;width:80px">
            <template v-if="'container' === widget.category">
              <div></div>
            </template>
            <template v-else>
              <fieldWidget :data="widget"></fieldWidget>
            </template>
          </div>
        </template>
      </draggable> 
     </div>
     <div class="container-action" v-if="true">
        <i title="选中父组件" @click.stop="selectParentWidget(field)">
           <SvgIcon icon-class="el-back" />
        </i>
        <i title="上移组件"
           @click.stop="moveUpWidget(field)"><SvgIcon icon-class="el-move-up" /></i>
        <i  title="下移组件"
           @click.stop="moveDownWidget(field)"><SvgIcon icon-class="el-move-down" /></i>
        <i title="插入行"
         @click.stop="appendTableRow(widget)"><SvgIcon icon-class="el-insert-row" /></i>
        <i title="插入列"
         @click.stop="appendTableCol(widget)"><SvgIcon icon-class="el-insert-column" /></i>
        <i  title="复制组件"
         @click.stop="cloneContainer(widget)"><SvgIcon icon-class="el-clone" /></i>
        <i title="删除组件" @click.stop="removeFieldWidget">
          <SvgIcon icon-class="el-delete" />
        </i>
      </div>

      <div class="drag-handler" v-if="false">
        <i title="拖拽手柄"><SvgIcon icon-class="el-drag-move" /></i>
        <i>{{data.name}}</i>
        <i><SvgIcon icon-class="el-hide" /></i>
      </div>
  </div>
</template>

<script setup lang="ts">
  import { reactive, toRefs, watch} from 'vue'
  import draggable from "vuedraggable"
  import SvgIcon from '@/designer/svgIcon'
  import fieldWidget from '../fieldWidget'
  import gridWidget from '../containerWidget/gridWidget.vue'

  const state = reactive({
       widgetList: [
          {id:'1',type: 'button',  icon: 'grid', name:'添加'},
          {id:'1',type: 'button',  icon: 'grid', name:'修改'},
          {id:'1',type: 'button',  icon: 'grid', name:'删除'},
        ]
    });

    const {
      widgetList
    }  = toRefs(state);
    const parentData = defineProps({
        data:{
            type: String,
            name: String
        }
    });

</script>

<style lang="scss" scoped>
     $--color-primary: #409EFF;
  .container-wrapper {
    position: relative;
    margin-bottom: 5px;

    .container-action{
      position: absolute;
      //bottom: -30px;
      bottom: 0;
      right: -2px;
      height: 28px;
      line-height: 28px;
      background: $--color-primary;
      z-index: 999;

      i {
        font-size: 14px;
        color: #fff;
        margin: 0 5px;
        cursor: pointer;
      }
    }

    .drag-handler {
      position: absolute;
      top: -2px;
      //bottom: -24px;  /* 拖拽手柄位于组件下方，有时无法正常拖动，原因未明？？ */
      left: -2px;
      height: 22px;
      line-height: 22px;
      background: $--color-primary;
      z-index: 9;

      i {
        font-size: 14px;
        font-style: normal;
        color: #fff;
        margin: 4px;
        cursor: move;
      }
    }

  }

  .container-action, .drag-handler {
    :deep(.svg-icon) {
      margin-left: 0.1em;
      margin-right: 0.1em;
    }
  }
</style>
